﻿Imports ASAP.InterfazNegocio

Public Class PreguntaEjercicio

    Private ejer As TiposDatosSTE.Ejercicio
    Private TipoErrorSeleccionado As TiposDatosSTE.Teoria

#Region "Eventos"

    Private Sub btnSolucion_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnSolucion.Click
        Try
            MuestraSolucion()
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
    End Sub

    Private Sub btnTipoError_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnTipoError.Click
        Try
            AbrePantallaTipoError()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub tbRespuesta_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles tbRespuesta.TextChanged
        Try
            TractaResultatCorrecte()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub tbIngles_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles tbIngles.TextChanged
        Try
            TractaResultatCorrecte()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

#End Region

#Region "Rutinas públicas"

    Public Sub FocoEnRespuesta()
        Me.tbRespuesta.Focus()
    End Sub

    Public Sub MuestraSolucion()
        Me.tbIngles.Text = ejer.Ingles
        Me.tbComentario.Text = ejer.Comentario
    End Sub

    Public Sub MarcaCorrecto()
        Me.rbCorrecto.IsChecked = True
    End Sub

    Public Sub AbrePantallaTipoError()
        Dim frmTeorias As New wTeorias
        frmTeorias.ShowDialog()
        If frmTeorias.Teoria IsNot Nothing Then
            Me.TipoErrorSeleccionado = frmTeorias.Teoria
            Me.tbTipoError.Text = Me.TipoErrorSeleccionado.TituloTeoria
        End If
        frmTeorias.Close()
    End Sub

    Public Function hayRespuesta() As Boolean
        If tbRespuesta.Text = String.Empty Then
            MsgBox("No hay respuesta")
            Return False
        ElseIf tbRespuesta.Text = tbIngles.Text And Not rbCorrecto.IsChecked Then
            MsgBox("La solución es correcta")
            Return False
        Else
            Return True
        End If
    End Function

    Public Sub GuardaRespuesta()

        'Actualiza el actual
        PreparaResultado()
        Agente.ActualizaEjercicioResultado(ejer)

        Me.tbRespuesta.Focus()

    End Sub


    Public Sub MuestraPregunta(ByVal ejer As TiposDatosSTE.Ejercicio)

        Me.ejer = ejer
        Me.ejer.Ingles = Me.ejer.Ingles.Replace("’", "'")

        InicializaControlesForm()

        Me.tbCastellano.Text = ejer.Castellano
        Me.tbComentario.Text = ejer.Comentario

        Me.tbRespuesta.Focus()
    End Sub

#End Region

#Region "Rutinas privadas"

    Private Sub InicializaControlesForm()

        Me.tbCastellano.Text = String.Empty
        Me.tbComentario.Text = String.Empty
        Me.tbIngles.Text = String.Empty
        Me.tbRespuesta.Text = String.Empty
        Me.tbTipoError.Text = String.Empty

    End Sub

    Private Sub PreparaResultado()

        ejer.Castellano = tbCastellano.Text
        If tbIngles.Text <> String.Empty Then
            ejer.Ingles = tbIngles.Text
        End If
        If tbComentario.Text <> String.Empty Then
            ejer.Comentario = tbComentario.Text
        End If

        Dim resultado As New TiposDatosSTE.Resultado
        resultado.Correcto = CBool(rbCorrecto.IsChecked)

        resultado.Ejercicio = ejer
        resultado.Fecha = Now
        resultado.Ingles = tbRespuesta.Text

        If Not resultado.Correcto Then
            If Me.TipoErrorSeleccionado IsNot Nothing Then

                If Me.tbTipoError.Text.Length > 1 Then
                    resultado.TituloTeoria = Me.tbTipoError.Text
                Else
                    Throw New Exception("El tipo de error no puede estar vacío")
                End If
            Else
                Throw New Exception("El tipo de error no puede estar vacío")
            End If
        End If

        ejer.Resultados.Add(resultado)

    End Sub

    Private Sub TractaResultatCorrecte()
        If Me.tbRespuesta.Text = Me.tbIngles.Text OrElse Me.tbRespuesta.Text = ejer.Ingles Then
            rbCorrecto.IsChecked = True
            rbIncorreco.IsChecked = False

        Else
            rbCorrecto.IsChecked = False
            rbIncorreco.IsChecked = True
        End If
    End Sub

#End Region

End Class